package ch.dueni.jsf12.lifecycle; import javax.faces.FacesException; import javax.faces.context.FacesContext; import javax.faces.event.PhaseListener; import javax.faces.lifecycle.Lifecycle; public class InterceptingLifecycle extends Lifecycle { private Lifecycle wrapped; public InterceptingLifecycle(Lifecycle standardLifecycle) { wrapped = standardLifecycle; } Lifecycle getWrapped() { return wrapped; } @Override public void addPhaseListener(PhaseListener listener) { System.out.println("addPhaseListener(" + listener + ")"); getWrapped().addPhaseListener(listener); } @Override public void execute(FacesContext context) throws FacesException { try { System.out.println("execute(...)"); getWrapped().execute(context); } catch (FacesException intercepted) { System.out.println("===>>> Intercepted Throwable from execute()"); intercepted.printStackTrace(); FacesContext.getCurrentInstance().renderResponse(); throw intercepted; } } @Override public PhaseListener[] getPhaseListeners() { return getWrapped().getPhaseListeners(); } @Override public void removePhaseListener(PhaseListener listener) { getWrapped().removePhaseListener(listener); } @Override public void render(FacesContext context) throws FacesException { try { System.out.println("render(...)"); getWrapped().render(context); } catch (FacesException intercepted) { System.out.println("===>>> Intercepted Throwable from render()"); intercepted.printStackTrace(); throw intercepted; } } }